#ifndef COMMON_LOG_H
#define COMMON_LOG_H

#include <spdlog/spdlog.h>

namespace chat {
extern std::shared_ptr<spdlog::logger> g_default_logger;

/** @brief 初始化全局日志器
 *  @param level[in]: 日志等级
 *  @param mode[in]: 日志模式. false: 调试模式, true: 发布模式
 *  @param file[in]: 发布模式下，日志输出到的文件名
 */
void initLogger(int32_t level, bool mode, const std::string &file);

#define LOG_TRACE(format, ...)                                              \
    do {                                                                    \
        chat::g_default_logger->trace(std::string("[{}:{}] ") + format, __FILE__, \
                                __LINE__, ##__VA_ARGS__);                   \
    } while (0)
#define LOG_DEBUG(format, ...)                                              \
    do {                                                                    \
        chat::g_default_logger->debug(std::string("[{}:{}] ") + format, __FILE__, \
                                __LINE__, ##__VA_ARGS__);                   \
    } while (0)
#define LOG_INFO(format, ...)                                              \
    do {                                                                   \
        chat::g_default_logger->info(std::string("[{}:{}] ") + format, __FILE__, \
                               __LINE__, ##__VA_ARGS__);                   \
    } while (0)
#define LOG_WARN(format, ...)                                              \
    do {                                                                   \
        chat::g_default_logger->warn(std::string("[{}:{}] ") + format, __FILE__, \
                               __LINE__, ##__VA_ARGS__);                   \
    } while (0)
#define LOG_ERROR(format, ...)                                              \
    do {                                                                    \
        chat::g_default_logger->error(std::string("[{}:{}] ") + format, __FILE__, \
                                __LINE__, ##__VA_ARGS__);                   \
    } while (0)
#define LOG_FATAL(format, ...)                                                 \
    do {                                                                       \
        chat::g_default_logger->critical(std::string("[{}:{}] ") + format, __FILE__, \
                                   __LINE__, ##__VA_ARGS__);                   \
    } while (0)

}  // namespace chat

#endif  // COMMON_LOG_H
